Computer systems often have the ability to execute different parts of the same program concurrently (i.e., in parallel). A programmer generally expresses the concurrency within the program to enable concurrent execution of the specified parts. The expression of concurrency in programs, however, is usually tightly coupled to the execution environment used to execute the program. The execution environment for a program may include, for example, the type of computer system, the programming language of the program, and runtime library or libraries in a computer system. As a result of this coupling, a program written for one execution environment may not be executable with another execution environment.
Even if a program may be executable in different execution environments, the program may not be able to take full advantage of the compute resources available in some execution environments. For example, a program written for a single machine may not execute on a cluster or cloud of machines. Even if the program is modified to execute on a cluster or cloud, the program may not be able to use the resources that are made available dynamically, such as by adding a new machine to the cluster or cloud.